﻿using System;
using System.Collections.ObjectModel;
using Comunes.Validadores;
using Contratos.Aseguradora;
using MJD.Comunes.DtoEntidades;
using Recursos;

namespace Presentadores.Aseguradoras
{
    /// <summary>
    /// Clase que hace de presentador para la vista que agrega una sucursal
    /// </summary>
    public class PresentadorAgregarSucursal: PresentadorBase
    {

        #region Atributos

        /// <summary>
        /// Objeto que posee las propiedades de la vista
        /// </summary>
        private IAgregarSucursal _vista;

        #endregion

        #region Constructor
        
        /// <summary> constructor de la clase </summary>
        /// <param name="vista">objeto que posee las propiedades de la vista</param>
        public PresentadorAgregarSucursal(IAgregarSucursal vista)
        {
            _vista = vista;
            CargarEstados();
            CargarTiposAseguradoras();
        }

        #endregion

        #region Metodos

        /// <summary>
        /// Metodo que llena el combo de estados
        /// </summary>
        private void CargarEstados()
        {
            WsOtrosClient servicio = new WsOtrosClient();
            servicio.ObtenerEstadosCompleted += ServicioObtenerEstadosCompleted;
            servicio.ObtenerEstadosAsync();

        }

        /// <summary>
        /// Metodo que carga el combobox de ciudades
        /// </summary>
        public void CargarCiudad()
        {
            DtoEstado estado = (DtoEstado)_vista.Estados.SelectedItem;
            WsOtrosClient servicio = new WsOtrosClient();
            servicio.ObtenerCiudadesCompleted += ServicioObtenerCiudadesCompleted;
            servicio.ObtenerCiudadesAsync(estado);
        }


        /// <summary>
        /// Metodo que llena el combobox de tipo de aseguradoras
        /// </summary>
        private void CargarTiposAseguradoras()
        {
            string[] letras = GetAppSetting(Strings.TipoAseguradora).Split(',');
            ObservableCollection<string> contenidoCombo = new ObservableCollection<string>();
            contenidoCombo.Add(Strings.SeleccioneTipoSucursal);
            foreach (string prefijo in letras)
            {
                contenidoCombo.Add(prefijo);
            }

            _vista.TipoAseguradora.ItemsSource = contenidoCombo;
            _vista.TipoAseguradora.SelectedIndex = 0;
        }

        
        #endregion

        #region Eventos


        /// <summary> evento que se ejecuta cuando el servicio de consultar ciudades responde </summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        private void ServicioObtenerCiudadesCompleted(object sender, ObtenerCiudadesCompletedEventArgs e)
        {
            try
            {
                ObservableCollection < DtoCiudad > lista = new ObservableCollection<DtoCiudad>(e.Result);
                DtoCiudad ciudad = new DtoCiudad();
                ciudad.Id = -1;
                ciudad.Nombre = Strings.SeleccioneCiudad;
                lista.Insert(0,ciudad);
                _vista.Ciudades.ItemsSource = lista;
                _vista.Ciudades.DisplayMemberPath = "Nombre";
                _vista.Ciudades.SelectedIndex = 0;
            }
            catch (Exception)
            {

                _vista.MensajeError (Mensajes.ErrorComunicacion + e.Error.InnerException.Message, e.Error.InnerException.StackTrace);

            }
        }


        /// <summary> evento que se ejecuta cuando el servicio de consultar estados responde </summary>
        /// <param name="sender">Objeto que realiza el evento</param>
        /// <param name="e">objeto que posee arguemto del evento</param>
        void ServicioObtenerEstadosCompleted(object sender, ObtenerEstadosCompletedEventArgs e)
        {
            try
            {
                ObservableCollection<DtoEstado> lista = new ObservableCollection<DtoEstado>(e.Result);
                DtoEstado estado = new DtoEstado();
                estado.Id = -1;
                estado.Nombre = Strings.SeleccioneEstado;
                lista.Insert(0,estado);
                _vista.Estados.ItemsSource = lista;
                _vista.Estados.DisplayMemberPath = "Nombre";
                _vista.Estados.SelectedIndex = 0;
                CargarCiudad();
            }
            catch (Exception)
            {
                _vista.MensajeError(Mensajes.ErrorComunicacion + e.Error.InnerException.Message, e.Error.InnerException.StackTrace);

            }
        }

        /// <summary> Metodo que valida que los controles hayan sido debidamente seleccionados </summary>
        /// <returns>true si son validos false si no</returns>
        public bool ValidarControles()
        {
            bool retorno = true;

            _vista.Estados.ClearValidationError();
            _vista.Ciudades.ClearValidationError();
            _vista.TipoAseguradora.ClearValidationError();
            _vista.Urbanizacion.ClearValidationError();
            _vista.Calle.ClearValidationError();
            _vista.Edificio.ClearValidationError();
            _vista.Piso.ClearValidationError();
            _vista.Apartamento.ClearValidationError();
            _vista.NumeroTelefonoPrincipal.ClearValidationError();
            _vista.CodigoAreaTelefonoPrincipal.ClearValidationError();
            _vista.CodigoAreaTelefonoSecundario.ClearValidationError();
            _vista.NumeroTelefonoSecundario.ClearValidationError();

            if(_vista.Estados.SelectedIndex == 0)
            {
                _vista.Estados.SetValidation(Mensajes.CampoRequerido);
                _vista.Estados.RaiseValidationError();
                retorno = false;
            }

            if (_vista.Ciudades.SelectedIndex == 0)
            {
                _vista.Ciudades.SetValidation(Mensajes.CampoRequerido);
                _vista.Ciudades.RaiseValidationError();
                retorno = false;
            }

            if (_vista.TipoAseguradora.SelectedIndex == 0)
            {
                _vista.TipoAseguradora.SetValidation(Mensajes.CampoRequerido);
                _vista.TipoAseguradora.RaiseValidationError();
                retorno = false;
            }

            if(_vista.Urbanizacion.Text.Equals(string.Empty))
            {
                _vista.Urbanizacion.SetValidation(Mensajes.CampoRequerido);
                _vista.Urbanizacion.RaiseValidationError();
                retorno = false;
            }

            if (_vista.Calle.Text.Equals(string.Empty))
            {
                _vista.Calle.SetValidation(Mensajes.CampoRequerido);
                _vista.Calle.RaiseValidationError();
                retorno = false;
            }

            if (_vista.Edificio.Text.Equals(string.Empty))
            {
                _vista.Edificio.SetValidation(Mensajes.CampoRequerido);
                _vista.Edificio.RaiseValidationError();
                retorno = false;
            }

            if(!_vista.CodigoAreaTelefonoPrincipal.Text.Equals(string.Empty) && !_vista.CodigoAreaTelefonoPrincipal.Text.SoloNumeros())
            {

                _vista.CodigoAreaTelefonoPrincipal.SetValidation(Mensajes.SoloNumeros);
                _vista.CodigoAreaTelefonoPrincipal.RaiseValidationError();
                retorno = false;
            }
            else if (!_vista.CodigoAreaTelefonoPrincipal.Text.Equals(string.Empty) &&  _vista.CodigoAreaTelefonoPrincipal.Text.Length != 4)
            {
                _vista.CodigoAreaTelefonoPrincipal.SetValidation(Mensajes.CodigoIncorrecto);
                _vista.CodigoAreaTelefonoPrincipal.RaiseValidationError();
                retorno = false;
            }
            else if(!_vista.NumeroTelefonoPrincipal.Text.Equals(string.Empty) && 
                !_vista.NumeroTelefonoPrincipal.Text.SoloNumeros())
            {
                _vista.NumeroTelefonoPrincipal.SetValidation(Mensajes.SoloNumeros);
                _vista.NumeroTelefonoPrincipal.RaiseValidationError();
                retorno = false;
            }
            else if(_vista.CodigoAreaTelefonoPrincipal.Text.Equals(string.Empty) && !_vista.NumeroTelefonoPrincipal.Text.Equals(string.Empty))
            {
                _vista.CodigoAreaTelefonoPrincipal.SetValidation(Mensajes.CampoRequerido);
                _vista.NumeroTelefonoPrincipal.SetValidation(Mensajes.CampoRequerido);
                _vista.CodigoAreaTelefonoPrincipal.RaiseValidationError();
                _vista.NumeroTelefonoPrincipal.RaiseValidationError();
                retorno = false;
            }
            else if (!_vista.CodigoAreaTelefonoPrincipal.Text.Equals(string.Empty) && _vista.NumeroTelefonoPrincipal.Text.Equals(string.Empty))
            {
                _vista.CodigoAreaTelefonoPrincipal.SetValidation(Mensajes.CampoRequerido);
                _vista.NumeroTelefonoPrincipal.SetValidation(Mensajes.CampoRequerido);
                _vista.CodigoAreaTelefonoPrincipal.RaiseValidationError();
                _vista.NumeroTelefonoPrincipal.RaiseValidationError();
                retorno = false;
            }
            else if ((_vista.CodigoAreaTelefonoPrincipal.Text.Equals(string.Empty) && _vista.NumeroTelefonoPrincipal.Text.Equals(string.Empty)))
            {

                _vista.CodigoAreaTelefonoPrincipal.SetValidation(Mensajes.CampoRequerido);
                _vista.NumeroTelefonoPrincipal.SetValidation(Mensajes.CampoRequerido);
                _vista.CodigoAreaTelefonoPrincipal.RaiseValidationError();
                _vista.NumeroTelefonoPrincipal.RaiseValidationError();
                retorno = false;
            }
            return retorno;
        }
        #endregion
    }
}
